/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Logica;

import Utilitarios.ServiceResult;
import Logica.AccesoDatos.DatosUsuario;
import Logica.ModeloDatos.*;
import Utilitarios.Constantes;
import java.util.ArrayList;
import java.math.*;
import java.security.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Betty
 */
public class GestorUsuario {

    //Instancia de la capa de acceso a datos
    private DatosUsuario _DatosUsuario;

    public GestorUsuario(){
        _DatosUsuario = new DatosUsuario();
    }

    /**
     * obtiene el estado de error del manejador
     * @return
     */
    public Boolean getExisteError() {
        return this._DatosUsuario.getExisteError();
    }

    /**
     * obtiene el mensaje de error del manejador
     * @return
     */
    public String getMensajeError() {
        return this._DatosUsuario.getMensajeError();
    }


    public ServiceResult autenticarUsuario(String correo, String contrasena) {
        /*
        // Valor a encriptar
        String cadenaEncriptada = contrasena;
        String md5 = "";
        // Algoritmo de encriptación
        MessageDigest mdEnc;
        try {
            mdEnc = MessageDigest.getInstance("MD5");

            mdEnc.update(cadenaEncriptada.getBytes(), 0, cadenaEncriptada.length());

            // Cadena encriptada
            md5 = new BigInteger(1, mdEnc.digest()).toString(16);

        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(GestorUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        */

        ServiceResult resultado;

        //variable del resultado final
        //resultado = _DatosUsuario.autenticarUsuario(correo, md5);
        resultado = _DatosUsuario.autenticarUsuario(correo, contrasena);
        return encapsularPersona(resultado);
    }

    public ServiceResult obtenerIdOrganizacion(int idRProy){
        ServiceResult resultado;

        //variable del resultado final
        resultado = _DatosUsuario.obtenerIdOrganizacion(idRProy);

        return resultado;

    }


    public ServiceResult insertarRProy(String nombre, String telefono, String puesto, String correo, String contrasena, int idOrganizacion){
        ServiceResult resultado;

        //variable del resultado final
        resultado = _DatosUsuario.insertarPersona(nombre, telefono, correo, puesto, Constantes.TIPO_RPROY, contrasena);
        if(!resultado.getExisteError().booleanValue()){
            ArrayList valorResultado = resultado.getValorResultado();
            //se obtiene la fila actual
            ArrayList unaFila = (ArrayList) valorResultado.get(0);
            //Se obtiene el idPersona
            int idPersona = Integer.parseInt(unaFila.get(0).toString());
            System.out.println("EL ID PERSONA ES   :" +  idPersona);
            if (idPersona == 0){
                resultado.setExisteError(Boolean.TRUE);
                resultado.setDescripcionError("El correo ya existe, por favor ingrese otro");
            }
            else{

                resultado = _DatosUsuario.insertarRProyOrganizacion(idPersona, idOrganizacion);

            }
        }
        return resultado;

    }


    public ServiceResult encapsularPersona(ServiceResult resultado){
        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {

            //se crea una lista de objetos Persona
            ArrayList<Persona> listaPersonas = new ArrayList<Persona>();
            //se obtiene el valor del resultado de la consulta
            ArrayList valorResultado = resultado.getValorResultado();
            //se obtiene la cantidad de registros que fueron consultados
            int cantidadPersonas = valorResultado.size();

            //para cada registro consultado
            for(int i = 0; i < cantidadPersonas; i++) {

                //se obtiene la fila actual
                ArrayList unaFila = (ArrayList) valorResultado.get(i);
                int idPersona = Integer.parseInt(unaFila.get(0).toString());
                String nombre = unaFila.get(1).toString();
                String tipo = unaFila.get(2).toString();
                //se crea un nuevo objeto Persona
                Persona persona = new PersonaBuilder(idPersona,nombre,tipo).getPersona();
               
                //persona.setCedula(unaFila.get(0).toString());

                listaPersonas.add(persona);

            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(listaPersonas);
        }
        return resultado;
    }

}
